﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using ProyectoGrupo5.ClasesDominio;
using ProyectoGrupo5.Persistencia;

namespace ProyectoGrupo5.Negocio
{
    public class BolsaTrabajo
    {
        // Dependencias
        public IAvisoDAO      AvisoDAO { get; set; }
        public ICandidatoDAO  CandidatoDAO { get; set; }
        public IOfertanteDAO  OfertanteDAO { get; set; }
        public IPostulanteDAO PostulanteDAO { get; set; }

        public Ofertante CrearOfertante(Ofertante ofertante)
        {
            if ((ofertante.CodigoOfertante == 0) ||
               String.Empty.Equals(ofertante.CodigoOfertante))
                throw new Exception("Código de ofertante no es válido");

            if (ofertante.Ruc == null ||
               String.Empty.Equals(ofertante.Ruc) ||
               ofertante.Ruc.Length != 11)
                throw new Exception("Número de Ruc no es válido");

            if (ofertante.Correo == null ||
               String.Empty.Equals(ofertante.Correo))
                throw new Exception("Cuenta de correo no es válido");

            return OfertanteDAO.CrearOfertante(ofertante);
        }

        public Aviso CrearAviso(Aviso aviso)
        {
            if ((aviso.CodigoAviso == 0) ||
               String.Empty.Equals(aviso.CodigoAviso))
                throw new Exception("Código de aviso no es válido");

            if (aviso.FechaInicio == null ||
               String.Empty.Equals(aviso.FechaInicio) ||
               aviso.FechaInicio < DateTime.Now)
                throw new Exception("Fecha de inicio no es válida ó es menor a fecha actual");

            if (aviso.FechaFin == null ||
              String.Empty.Equals(aviso.FechaFin) ||
              aviso.FechaFin < DateTime.Now)
                throw new Exception("Fecha de fin no es válida ó es menor a fecha actual");

            if (aviso.FechaInicio > aviso.FechaFin)
                throw new Exception("Fecha de inicio no puede ser mayor que fecha fin");

            if (aviso.FechaFin < aviso.FechaInicio)
                throw new Exception("Fecha de fin no puede ser menor que fecha inicio");

            if (aviso.Ofertante.CodigoOfertante == 0 ||
               String.Empty.Equals(aviso.Ofertante.CodigoOfertante))
                throw new Exception("Codigo de ofertante no es válido");

            return AvisoDAO.CrearAviso(aviso);
        }
        
        public Candidato RealizarPostulacion(Int32 candidatoCodigo, Int32 avisoCodigo, Int32 postulanteCodigo)
        {
            Candidato candidatoACrear = new Candidato();
            Aviso aviso = AvisoDAO.ObtenerAviso(avisoCodigo);
            Postulante postulante = PostulanteDAO.ObtenerPostulante(postulanteCodigo);
            candidatoACrear.CodigoCandidato = candidatoCodigo;
            candidatoACrear.Aviso = aviso;
            candidatoACrear.EstadoSeleccion = "Postulante";
            candidatoACrear.Postulante = postulante;
            return CandidatoDAO.CrearCandidato(candidatoACrear);
        }

       public ICollection<Aviso> ConsultarAvisosXOfertante(Int32 codigoOfertante)
        {
            Ofertante ofertanteExistente = OfertanteDAO.ObtenerOfertanteCodigo(codigoOfertante);
            if (codigoOfertante == 0 || String.Empty.Equals(codigoOfertante))
                throw new Exception("Código de ofertante no es válido");
            if (ofertanteExistente == null)
                throw new Exception("Ofertante no existe");
            return null; // AvisoDAO.ListarXOfertante(codigoOfertante);
        }

        /*       public ICollection<Reserva> ConsultarReservasXAlumno(String alumnoCodigo)
               {
                   Alumno alumnoExistente = AlumnoDAO.Obtener(alumnoCodigo);
                   if (alumnoCodigo == null || String.Empty.Equals(alumnoCodigo))
                       throw new Exception("Código de alumno no válido");
                   if (alumnoExistente == null)
                       throw new Exception("Alumno inexistente");
                   return ReservaDAO.ListarXAlumno(alumnoCodigo);
               }*/
    }
}